2.2-time 模块
Create by fall on 14 Nov 2025 Recently revised in 14 Nov 2025
静态属性
time.Now()获取当前时间- 参与计算的属性
time.Hour、time.Minute、time.Second time.Sleep(1* time.Second)系统休眠一秒
const (
// The reference time, in numerical order.
Layout = "01/02 03:04:05PM '06 -0700"
ANSIC = "Mon Jan _2 15:04:05 2006"
UnixDate = "Mon Jan _2 15:04:05 MST 2006"
RubyDate = "Mon Jan 02 15:04:05 -0700 2006"
RFC822 = "02 Jan 06 15:04 MST"
RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850 = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339 = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen = "3:04PM"
// Handy time stamps.
Stamp = "Jan _2 15:04:05"
StampMilli = "Jan _2 15:04:05.000"
StampMicro = "Jan _2 15:04:05.000000"
StampNano = "Jan _2 15:04:05.000000000"
)
常用方法
格式化
func FormatTime (){
// 格式化时间 (使用参考时间: Mon Jan 2 15:04:05 MST 2006)
dateStr := time.Now().Format("2006-01-02T15:04:05.999-07:00")
dateStr2 := time.Now().Add(-60 * time.Second).Format("2006-01-02 15:04:05")
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05")) // 2024-01-15 10:30:45
fmt.Println(now.Format("2006/01/02")) // 2024/01/15
fmt.Println(now.Format("15:04:05")) // 10:30:45
fmt.Println(now.Format("2006-01-02 15:04:05.000")) // 带毫秒
fmt.Println(now.Format(time.RFC3339)) // 2024-01-15T10:30:45+08:00
}
时间解析
func TimeParse (){
t1, _ := time.Parse("2006-01-02", "2024-01-15")
// 解析带时区的时间
loc, _ := time.LoadLocation("Asia/Shanghai")
t4, _ := time.ParseInLocation("2006-01-02 15:04:05", "2024-01-15 10:30:45", loc)
}
func TimestampParse(){
// 转换为 time.Time
t := time.Unix(timestamp, 0)
str1 := t.Format("2006-01-02 15:04:05")
}
各个组成部分
func TimePart(){
now := time.Now()
year := now.Year()
month := now.Month() // 类型为 time.Month
day := now.Day()
hour := now.Hour()
minute := now.Minute()
second := now.Second() // 1000 * 1000 * Nanosecond
nanosecond := now.Nanosecond()
weekday := now.Weekday() // 类型为 time.Weekday
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}
特定时间
func SpecialTime(){
// 今天 0 点
t := time.Now()
todayZeroTime := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
// 获取本周周一的时间
dayInWeek := todayZeroTime.Weekday() // 0 - 6, 周日到周六
var offset int = int(dayInWeek - 1)
if dayInWeek == 0 {
offset = 6
}
weekZeroTime := todayZeroTime.AddDate(0, 0, -offset)
}
时间计算
func YesterdayThisTime(){
t := time.Now()
// 前一天,三个参数分别为,年,月,日
yesterdayThisTime := t.AddDate(0, 0, -1)
tomorrow := t.Add(24 * time.Hour)
}
时间比较
func IsAfter(){
t := time.Now()
tomorrow := t.Add(24 * time.Hour)
// 比较两个时间
if t.Before(tomorrow) {
fmt.Println("now is before tomorrow")
}
if t.After(yesterday) {
fmt.Println("now is after yesterday")
}
// 计算两个时间的差值
diff := tomorrow.Sub(now)
fmt.Println(diff) // 24h0m0s
}
定时器
func TimberCase(){
// 创建一个定时器,2秒后触发
timer := time.NewTimer(2 * time.Second)
<-timer.C
fmt.Println("Timer expired")
// 或者使用 time.After
<-time.After(2 * time.Second)
fmt.Println("After 2 seconds")
}
func TimberTicker(){
// 创建一个打点器,每1秒触发一次
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for i := 0; i < 5; i++ {
<-ticker.C
fmt.Println("Tick")
}
}
时区
func TimberTicker(){
// 加载时区
loc, err := time.LoadLocation("America/New_York")
if err != nil {
panic(err)
}
// 使用指定时区获取时间
t5 := time.Now().In(loc)
fmt.Println(t5)
// 构造指定时区的时间
t6 := time.Date(2024, 1, 1, 12, 0, 0, 0, loc)
fmt.Println(t6)
}
执行消耗时间
start := time.Now()
// 执行一些操作
time.Sleep(100 * time.Millisecond)
elapsed := time.Since(start)
fmt.Printf("程序运行耗时:%s\n", elapsed)